Search K
Appearance
Appearance
REST(Representational State Transfer,表述性状态转移),核心:用 HTTP 动词表达操作,URL 代表资源,无状态,返回统一资源表述
资源统一用复数名词,不用动词
# 正确
GET /users 获取所有用户
GET /users/123 获取id=123的用户
POST /users 创建用户
PUT /users/123 全量更新用户
DELETE /users/123 删除用户
# 错误(含动词)
/getUsers
/deleteUser/123用 / 表示从属关系
GET /users/100/orders # 100号用户的所有订单
GET /users/100/orders/200 # 100用户下200号订单小写英文,
横线 - 分隔
,禁止下划线、驼峰
/user-address ✅
/userAddress /user_address ❌过滤特殊字符,不用中文、空格
版本号放 URL 头部(两种主流方案)
# 方案1(推荐)
/api/v1/users
# 方案2(Header)
Header: Accept: application/vnd.xxx.v1+json全局统一前缀 /api 区分前端页面接口
不要写进路径
# 正确
GET /users?page=1&size=10&sort=createTime,desc&status=enable
# 错误
/users/page/1/size/10| Method | 语义 | 操作说明 |
|---|---|---|
| GET | 查询资源 | 只读,无副作用,可缓存 |
| POST | 创建资源 | 新增,服务端生成唯一 ID |
| PUT | 全量更新 | 完整替换资源,必填所有字段 |
| PATCH | 局部更新 | 只传修改字段,增量更新 |
| DELETE | 删除资源 | 移除指定资源 |
# 创建用户
POST /users body:{name:"张三"}
# 完整覆盖更新用户123
PUT /users/123 body:{name:"新名字",age:20,...全部字段}
# 只修改年龄
PATCH /users/123 body:{age:22}
# 删除
DELETE /users/123200 OK:GET/PUT/PATCH 查询、更新成功201 Created:POST 创建资源成功(返回资源地址 Location)204 No Content:DELETE 删除成功,无返回体304 Not Modified:缓存未过期400 Bad Request:参数格式错误、请求体非法401 Unauthorized:未登录 /token 失效403 Forbidden:已登录,但无操作权限404 Not Found:资源不存在405 Method Not Allowed:接口不支持该请求方式(如对 GET 接口发 POST)409 Conflict:资源冲突(重复创建唯一值)422 Unprocessable Entity:参数校验失败(字段非法、长度不足)500 Internal Server Error:服务器未知异常503 Service Unavailable:服务停机 / 限流{
"code": 200,
"msg": "操作成功",
"data": {
"id": 1,
"username": "test"
}
}{
"code": 200,
"msg": "查询成功",
"data": {
"records": [],
"total": 135,
"page": 1,
"size": 10
}
}{
"code": 422,
"msg": "用户名不能为空",
"data": null
}约定:
code:业务码,和 HTTP 状态码保持对应msg:人类可读提示文案data:业务数据,无数据时返回 null,不省略字段Content-Type: application/jsonAuthorization: Bearer {token}User-Agent: xxx-app/1.0不要把动作放 URL,两种方案:
方案 1:用资源状态字段 + PATCH
PATCH /orders/100 {status:"cancel"}方案 2:新增动作子资源 POST
POST /orders/100/cancelPOST /upload,Content-Type: multipart/form-dataPOST /users/100/avatar统一用 GET + query,不新建 /search 路径
GET /goods?keyword=手机/addUser /updateUser# 查询列表
GET /api/v1/users?page=1&size=10
# 单条查询
GET /api/v1/users/1
# 创建
POST /api/v1/users
# 全量更新
PUT /api/v1/users/1
# 局部更新
PATCH /api/v1/users/1
# 删除
DELETE /api/v1/users/1
# 用户订单
GET /api/v1/users/1/orders